package net.simflow.swf.analyzer.exec.stats.data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.TreeMap;

import net.simflow.swf.analyzer.exec.data.ExecResult;
import net.simflow.swf.analyzer.exec.data.ServiceOverAbilityRecord;
import net.simflow.swf.analyzer.exec.data.TaskExecResult;
import net.simflow.swf.analyzer.network.data.Flow;
import net.simflow.swf.analyzer.network.data.Service;

public class ExecStats {
	public final static String EXECUTION_TIME_DISTRIBUTION = "Execution Time Distribution";

	public final static String FLOW_EXEC_TIME = "Flow Exec Time";
	public final static String FLOW_MAX_EXEC_TIME_DISTRIBUTION = "Flow Max Exec Time Distribution";
	public final static String FLOW_MIN_EXEC_TIME_DISTRIBUTION = "Flow Min Exec Time Distribution";
	public final static String FLOW_AVG_EXEC_TIME_DISTRIBUTION = "Flow Average Exec Time Distribution";

	public final static String FLOW_TOTAL_COUNT = "Flow Total Task Count";
	public final static String FLOW_EXECUTED_COUNT = "Flow Executed Task Count";
	public final static String FLOW_UNFINISHED_COUNT = "Flow Unfinished Task Count";
	public final static String FLOW_TOTAL_COUNT_DISTRIBUTION = "Flow Total Task Count Distribution";
	public final static String FLOW_EXECUTED_COUNT_DISTRIBUTION = "Flow Executed Task Count Distribution";
	public final static String FLOW_UNFINISHED_COUNT_DISTRIBUTION = "Flow Unfinished Task Count Distribution";
	public final static String FLOW_OVER_ABILITY_TIME = "Flow Over Ability Time";
	public final static String FLOW_OVER_ABILITY_TIME_DISTRIBUTION = "Flow Over Ability Time Distribution";

	public final static String SERVICE_TOTAL_COUNT = "Service Total Task Count";
	public final static String SERVICE_EXECUTED_COUNT = "Service Executed Task Count";
	public final static String SERVICE_UNFINISHED_COUNT = "Service Unfinished Task Count";
	public final static String SERVICE_OVER_ABILITY_TIME = "Service Over Ability Time";
	public final static String SERVICE_TOTAL_COUNT_DISTRIBUTION = "Service Total Task Count Distribution";
	public final static String SERVICE_EXECUTED_COUNT_DISTRIBUTION = "Service Executed Task Count Distribution";
	public final static String SERVICE_UNFINISHED_COUNT_DISTRIBUTION = "Service Unfinished Task Count Distribution";
	public final static String SERVICE_OVER_ABILITY_TIME_DISTRIBUTION = "Service Over Ability Time Distribution";

	public final static String SERVICE_WAIT_TIME = "Service Wait Time";
	public final static String SERVICE_MAX_WAIT_TIME_DISTRIBUTION = "Service Max Wait Time Distribution";
	public final static String SERVICE_MIN_WAIT_TIME_DISTRIBUTION = "Service Min Wait Time Distribution";
	public final static String SERVICE_AVG_WAIT_TIME_DISTRIBUTION = "Service Average Wait Time Distribution";

	private ExecResult execResult;
	private TreeMap<Integer, ArrayList<TaskExecResult>> execTimeDistribution;

	private HashMap<Flow, FlowExecTime> flowExecTimeMap;
	private TreeMap<Integer, ArrayList<Flow>> flowMinExecTimeDistribution;
	private TreeMap<Integer, ArrayList<Flow>> flowMaxExecTimeDistribution;
	private TreeMap<Double, ArrayList<Flow>> flowAvgExecTimeDistribution;

	private HashMap<Flow, ArrayList<TaskExecResult>> flowTotalCountMap;
	private HashMap<Flow, ArrayList<TaskExecResult>> flowExecCountMap;
	private HashMap<Flow, ArrayList<TaskExecResult>> flowUnfinishedCountMap;
	private HashMap<Flow, ServiceOverAbilityRecord> flowOverAbilityTimeMap;
	private TreeMap<Integer, ArrayList<Flow>> flowTotalCountDistribution;
	private TreeMap<Integer, ArrayList<Flow>> flowExecCountDistribution;
	private TreeMap<Integer, ArrayList<Flow>> flowUnfinishedCountDistribution;
	private TreeMap<Integer, ArrayList<Flow>> flowOverAbilityTimeDistribution;

	private HashMap<Service, Integer> serviceTotalCountMap;
	private HashMap<Service, Integer> serviceExecCountMap;
	private HashMap<Service, Integer> serviceUnfinishedCountMap;
	private HashMap<Service, ServiceWaitTime> serviceWaitTimeMap;
	private HashMap<Service, Integer> serviceOverAbilityTimeMap;
	private TreeMap<Integer, ArrayList<Service>> serviceTotalCountDistribution;
	private TreeMap<Integer, ArrayList<Service>> serviceExecCountDistribution;
	private TreeMap<Integer, ArrayList<Service>> serviceUnfinishedCountDistribution;
	private TreeMap<Integer, ArrayList<Service>> serviceMinWaitTimeDistribution;
	private TreeMap<Integer, ArrayList<Service>> serviceMaxWaitTimeDistribution;
	private TreeMap<Double, ArrayList<Service>> serviceAvgWaitTimeDistribution;
	private TreeMap<Integer, ArrayList<Service>> serviceOverAbilityTimeDistribution;

	public HashMap<Flow, ArrayList<TaskExecResult>> getFlowTotalCountMap() {
		return flowTotalCountMap;
	}

	public void setFlowTotalCountMap(
			HashMap<Flow, ArrayList<TaskExecResult>> flowTotalCountMap) {
		this.flowTotalCountMap = flowTotalCountMap;
	}

	public HashMap<Flow, ArrayList<TaskExecResult>> getFlowExecCountMap() {
		return flowExecCountMap;
	}

	public void setFlowExecCountMap(
			HashMap<Flow, ArrayList<TaskExecResult>> flowExecCountMap) {
		this.flowExecCountMap = flowExecCountMap;
	}

	public HashMap<Flow, ArrayList<TaskExecResult>> getFlowUnfinishedCountMap() {
		return flowUnfinishedCountMap;
	}

	public void setFlowUnfinishedCountMap(
			HashMap<Flow, ArrayList<TaskExecResult>> flowUnfinishedCountMap) {
		this.flowUnfinishedCountMap = flowUnfinishedCountMap;
	}

	public HashMap<Flow, ServiceOverAbilityRecord> getFlowOverAbilityTimeMap() {
		return flowOverAbilityTimeMap;
	}

	public void setFlowOverAbilityTimeMap(
			HashMap<Flow, ServiceOverAbilityRecord> flowOverAbilityTimeMap) {
		this.flowOverAbilityTimeMap = flowOverAbilityTimeMap;
	}

	public TreeMap<Integer, ArrayList<Flow>> getFlowTotalCountDistribution() {
		return flowTotalCountDistribution;
	}

	public void setFlowTotalCountDistribution(
			TreeMap<Integer, ArrayList<Flow>> flowTotalCountDistribution) {
		this.flowTotalCountDistribution = flowTotalCountDistribution;
	}

	public TreeMap<Integer, ArrayList<Flow>> getFlowExecCountDistribution() {
		return flowExecCountDistribution;
	}

	public void setFlowExecCountDistribution(
			TreeMap<Integer, ArrayList<Flow>> flowExecCountDistribution) {
		this.flowExecCountDistribution = flowExecCountDistribution;
	}

	public TreeMap<Integer, ArrayList<Flow>> getFlowUnfinishedCountDistribution() {
		return flowUnfinishedCountDistribution;
	}

	public void setFlowUnfinishedCountDistribution(
			TreeMap<Integer, ArrayList<Flow>> flowUnfinishedCountDistribution) {
		this.flowUnfinishedCountDistribution = flowUnfinishedCountDistribution;
	}

	public TreeMap<Integer, ArrayList<Flow>> getFlowOverAbilityTimeDistribution() {
		return flowOverAbilityTimeDistribution;
	}

	public void setFlowOverAbilityTimeDistribution(
			TreeMap<Integer, ArrayList<Flow>> flowOverAbilityTimeDistribution) {
		this.flowOverAbilityTimeDistribution = flowOverAbilityTimeDistribution;
	}

	public HashMap<Service, Integer> getServiceTotalCountMap() {
		return serviceTotalCountMap;
	}

	public void setServiceTotalCountMap(
			HashMap<Service, Integer> serviceTotalCountMap) {
		this.serviceTotalCountMap = serviceTotalCountMap;
	}

	public TreeMap<Integer, ArrayList<Service>> getServiceTotalCountDistribution() {
		return serviceTotalCountDistribution;
	}

	public void setServiceTotalCountDistribution(
			TreeMap<Integer, ArrayList<Service>> serviceTotalCountDistribution) {
		this.serviceTotalCountDistribution = serviceTotalCountDistribution;
	}

	public TreeMap<Integer, ArrayList<Service>> getServiceOverAbilityTimeDistribution() {
		return serviceOverAbilityTimeDistribution;
	}

	public void setServiceOverAbilityTimeDistribution(
			TreeMap<Integer, ArrayList<Service>> serviceOverAbilityTimeDistribution) {
		this.serviceOverAbilityTimeDistribution = serviceOverAbilityTimeDistribution;
	}

	public HashMap<Service, ServiceWaitTime> getServiceWaitTimeMap() {
		return serviceWaitTimeMap;
	}

	public void setServiceWaitTimeMap(
			HashMap<Service, ServiceWaitTime> serviceWaitTimeMap) {
		this.serviceWaitTimeMap = serviceWaitTimeMap;
	}

	public TreeMap<Integer, ArrayList<Service>> getServiceMinWaitTimeDistribution() {
		return serviceMinWaitTimeDistribution;
	}

	public void setServiceMinWaitTimeDistribution(
			TreeMap<Integer, ArrayList<Service>> serviceMinWaitTimeDistribution) {
		this.serviceMinWaitTimeDistribution = serviceMinWaitTimeDistribution;
	}

	public TreeMap<Integer, ArrayList<Service>> getServiceMaxWaitTimeDistribution() {
		return serviceMaxWaitTimeDistribution;
	}

	public void setServiceMaxWaitTimeDistribution(
			TreeMap<Integer, ArrayList<Service>> serviceMaxWaitTimeDistribution) {
		this.serviceMaxWaitTimeDistribution = serviceMaxWaitTimeDistribution;
	}

	public TreeMap<Double, ArrayList<Service>> getServiceAvgWaitTimeDistribution() {
		return serviceAvgWaitTimeDistribution;
	}

	public void setServiceAvgWaitTimeDistribution(
			TreeMap<Double, ArrayList<Service>> serviceAvgWaitTimeDistribution) {
		this.serviceAvgWaitTimeDistribution = serviceAvgWaitTimeDistribution;
	}

	public ExecResult getExecResult() {
		return execResult;
	}

	public void setExecResult(ExecResult execResult) {
		this.execResult = execResult;
	}

	public HashMap<Service, Integer> getServiceExecCountMap() {
		return serviceExecCountMap;
	}

	public void setServiceExecCountMap(
			HashMap<Service, Integer> serviceExecCountMap) {
		this.serviceExecCountMap = serviceExecCountMap;
	}

	public HashMap<Service, Integer> getServiceUnfinishedCountMap() {
		return serviceUnfinishedCountMap;
	}

	public void setServiceUnfinishedCountMap(
			HashMap<Service, Integer> serviceUnfinishedCountMap) {
		this.serviceUnfinishedCountMap = serviceUnfinishedCountMap;
	}

	public TreeMap<Integer, ArrayList<TaskExecResult>> getExecTimeDistribution() {
		return execTimeDistribution;
	}

	public void setExecTimeDistribution(
			TreeMap<Integer, ArrayList<TaskExecResult>> execTimeDistribution) {
		this.execTimeDistribution = execTimeDistribution;
	}

	public TreeMap<Integer, ArrayList<Service>> getServiceExecCountDistribution() {
		return serviceExecCountDistribution;
	}

	public void setServiceExecCountDistribution(
			TreeMap<Integer, ArrayList<Service>> serviceExecCountDistribution) {
		this.serviceExecCountDistribution = serviceExecCountDistribution;
	}

	public TreeMap<Integer, ArrayList<Service>> getServiceUnfinishedCountDistribution() {
		return serviceUnfinishedCountDistribution;
	}

	public void setServiceUnfinishedCountDistribution(
			TreeMap<Integer, ArrayList<Service>> serviceUnfinishedCountDistribution) {
		this.serviceUnfinishedCountDistribution = serviceUnfinishedCountDistribution;
	}

	public HashMap<Service, Integer> getServiceOverAbilityTimeMap() {
		return serviceOverAbilityTimeMap;
	}

	public void setServiceOverAbilityTimeMap(
			HashMap<Service, Integer> serviceOverAbilityTimeMap) {
		this.serviceOverAbilityTimeMap = serviceOverAbilityTimeMap;
	}

	public HashMap<Flow, FlowExecTime> getFlowExecTimeMap() {
		return flowExecTimeMap;
	}

	public void setFlowExecTimeMap(HashMap<Flow, FlowExecTime> flowExecTimeMap) {
		this.flowExecTimeMap = flowExecTimeMap;
	}

	public TreeMap<Integer, ArrayList<Flow>> getFlowMinExecTimeDistribution() {
		return flowMinExecTimeDistribution;
	}

	public void setFlowMinExecTimeDistribution(
			TreeMap<Integer, ArrayList<Flow>> flowMinExecTimeDistribution) {
		this.flowMinExecTimeDistribution = flowMinExecTimeDistribution;
	}

	public TreeMap<Integer, ArrayList<Flow>> getFlowMaxExecTimeDistribution() {
		return flowMaxExecTimeDistribution;
	}

	public void setFlowMaxExecTimeDistribution(
			TreeMap<Integer, ArrayList<Flow>> flowMaxExecTimeDistribution) {
		this.flowMaxExecTimeDistribution = flowMaxExecTimeDistribution;
	}

	public TreeMap<Double, ArrayList<Flow>> getFlowAvgExecTimeDistribution() {
		return flowAvgExecTimeDistribution;
	}

	public void setFlowAvgExecTimeDistribution(
			TreeMap<Double, ArrayList<Flow>> flowAvgExecTimeDistribution) {
		this.flowAvgExecTimeDistribution = flowAvgExecTimeDistribution;
	}
}
